package annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 该注解时用来标注那些类可以被反射机制自动调用
 * 定义注解时,我们通常会使用java内置的两个注解来加以修饰当前注解.其中:
 * @Retention 用来表示当前注解的保留级别.有三个值,对应:
 *  RetentionPolicy.SOURCE 当前注解仅保存在源码中
 *  RetentionPolicy.CLASS 默认值,表示注解会保留在字节码中,但是反射机制不可用
 *  RetentionPolicy.RUNTIME 表示保留在字节码文件中,但是可以被反射机制使用,所以这也是我们通常指定的选项
 * @Target 用于表示当前注解使用的位置,可选项都定义在ElementType中
 *  ElementType.TYPE 在类上使用
 *  ElementType.FILED 在属性上使用
 *  ElementType.METHOD 在方法上使用
 *  不写这个注解,那么注解将会在哪里都可以使用
 *
 */
@Retention(RetentionPolicy.RUNTIME)
//@Target({ElementType.FIELD,ElementType.METHOD})
@Target(ElementType.TYPE)
public @interface AutoRunClass {

}
